Skip to main content

How-To Guides

The pipeline file (operations.json)

{
"version": "1.0",
"name": "My pipeline",
"createdAt": "2026-01-01T00:00:00.000Z",
"steps": [
{ "id": "a1", "op": "grayscale", "params": {}, "enabled": true },
{ "id": "b2", "op": "gaussian_blur", "params": { "ksize": 5 }, "enabled": true }
]
}

Disabled steps are skipped. The same file drives the editor, the CLI, and the Tapis job.

Configure a batch job submission

FieldMeaning
Job nameOptional label (auto-generated if blank).
Source systemTapis system holding your input images.
Input directoryFolder of images — processed recursively (all subfolders).
Output directoryWhere processed images are archived (mirrors the input tree).
Archive systemSystem the output directory lives on.
Image extensionsOptional filter, e.g. .jpg,.png. Blank = common defaults.
Exec systemWhere the job runs. Determines the queue and working dirs (below).
Allocation account (SLURM)Passed as -A <account>.
Nodes / Cores / Mem / MinutesCompute limits.

System-specific behaviour

The exec system you pick changes how the job is submitted:

Exec systemQueueWorking dirs
OSC (pitzer / cardinal / ascend)cpu/fs/scratch/<account>/harvest_jobs/${JobUUID}
Expanse (expanse-*)tapisSharedapp defaults (no scratch override)

Monitor, search, cancel jobs

The Your jobs table lists your opencv-preprocess jobs with live status badges (auto-refreshes while any job is active). You can:

  • Search by job name or UUID.
  • Filter by status.
  • Cancel a running/queued job with the ✕ button.

Run the pipeline without the app (CLI / container)

The same processing engine runs standalone — handy for local batches or scripts.

Python CLI

pip install -e packages/opencv-executor

# single image
opencv-executor run operations.json input.jpg output.jpg

# a flat folder
opencv-executor batch operations.json input_dir/ output_dir/

Recursive processing (all subdirectories, mirroring the tree) is what the Tapis container uses:

python packages/tapis-job/preprocess.py \
--input input_dir/ \
--output output_dir/ \
--pipeline operations.json

Container

apptainer run \
--bind /data/in:/in --bind /data/out:/out \
--bind "$PWD/operations.json:/pipeline.json" \
preprocess.sif --input /in --output /out --pipeline /pipeline.json

Config can also come from env vars: INPUT_DIR, OUTPUT_DIR, PIPELINE_FILE, IMAGE_EXTENSIONS.